# include "rectangulo.h"

using namespace std;

void
Rectangulo::trasladar(float x, float y)
{
	si.trasladar(x,y);
	
	id.trasladar(x,y);
}

void
Rectangulo::redimensionar(float x, float y)
{
	si.trasladar(x,y);		
}

void
Rectangulo::redimensionar2(float x, float y)
{
	float tamX, tamY;
	
	tamX = si.getX() - id.getX();
	
	tamY = si.getY() - id.getY();
	
	if (invX)
	{
		if (invY)
		{
			si.trasladar(x,y);		
			
			id.trasladar(-x,-y);				
		}
		
		else
		{
			si.trasladar(x,-y);		
			
			id.trasladar(-x,y);				
		}
	}
	
	else
	{
		if (invY)
		{
			si.trasladar(-x,y);		
			
			id.trasladar(x,-y);				
		}
		
		else
		{
			si.trasladar(-x,-y);		
			
			id.trasladar(x,y);			
		}
	}
	
	if (signo(tamX) != signo(si.getX() - id.getX()))
	{
		invX = !invX;
	}
	
	if (signo(tamY) != signo(si.getY() - id.getY()))
	{
		invY = !invY;
	}

	normalizaPuntos();
}

void 
Rectangulo::normalizaPuntos ()
{
	float aux;
	
	if (si.getX() > id.getX())
	{
		aux = si.getX();
		
		si.setX(id.getX());
		
		id.setX(aux);
	}
	
	if (si.getY() < id.getY())
	{
		aux = si.getY();
		
		si.setY(id.getY());
		
		id.setY(aux);
	}
}

bool
Rectangulo::contenida(Punto a, Punto b)
{
	bool ret = false;
	
	if ((si.getX() >= a.getX()) && (id.getX() <= b.getX()) && (si.getY() <= a.getY()) && (id.getY() >= b.getY()))
	{
		ret = true;	
	}
	
	return (ret);
}

list<Figura*> 
Rectangulo::pintar()
{
	list<Figura*> ret;
	
	Linea* l;
	
	Punto a, b;
	
	a.setX(si.getX());
	
	a.setY(si.getY());
	
	b.setX(id.getX());
	
	b.setY(si.getY());// HOR ARRIBA
	
	l = new Linea(a, b);
	
	l->setCR(getCR());
	
	l->setCB(getCB());
	
	l->setCG(getCG());	
	
	ret.push_back(l);
	
	a.setY(id.getY());
	
	b.setY(id.getY());//HOR BAJO
	
	l = new Linea(a, b);
	
	l->setCR(getCR());
	
	l->setCB(getCB());
	
	l->setCG(getCG());	
	
	ret.push_back(l);
	
	b.setX(si.getX());
	
	b.setY(si.getY()); // VERT IZQ 
	
	l = new Linea(a, b);
	
	l->setCR(getCR());
	
	l->setCB(getCB());
	
	l->setCG(getCG());	
	
	ret.push_back(l);
	
	a.setX(id.getX());
	
	b.setX(id.getX()); // VERT DER
	
	l = new Linea(a, b);
	
	l->setCR(getCR());
	
	l->setCB(getCB());
	
	l->setCG(getCG());	
	
	ret.push_back(l);
	
	return ret;
}
